# -*- coding: utf-8 -*-
'''eof
name:未结清贷款及其他账户总数
code:CreditCnt_2D
tableName:
columnName:
groups:个人征信
dependencies:IC_DSJ_2D
type:常用指标
dataSourceType:
eof'''

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
null_type_list = ['', ' ', None, 'null', 'Null', 'NULL', '/', '-', '--']

def getTable(data, tableName, occurTimes):
    '''
        获取表信息
        :param data:表上层的字典对象
        :param tableName:表的名字
        :param occurTimes:表出现的次数，如果是0代表此表可以不出现，如果是1代表此表必须出现
        :return:该表全部数据
        '''
    table = data.get(tableName)
    if occurTimes == 0:
        if table is None or table == "":
            return [{}]
        elif isinstance(table, list) is False or len(table) == 0:
            return None
        else:
            return data.get(tableName)
    if occurTimes == 1:
        if table == "":
            return [{}]
        elif table is None or isinstance(table, list) is False or len(table) == 0:
            return None
        elif len(table) == 0:
            return [{}]
        else:
            return data.get(tableName)

def isfloat(x):
    '''
    判断x为float类型且大于等于0
    :param x:
    :return:
    '''
    try:
        if isinstance(float(x), float) and float(x)>=0:
            if str(x) in ['inf', 'infinity', 'INF', 'INFINITY', 'True']:
                return False
            else:
                return True
        else:
            return False
    except:
        return False

def value(x,y):
     if x.has_key(y) and isfloat(x[y])==True and x[y] not in null_type_list:
         return float(x[y])
     else:
         return 0


def IC1_CreditCnt():
    factor = []
    data = IC_DSJ_2D['data']

    try:
        PDA=getTable(data,"PDA",1)
        if PDA is None:
            return u"缺失值"
        elif PDA == [{}]:
            return u"缺失值"
        else:
            PD01 = getTable(PDA[0], 'PD01', 0)
            if PD01 is None:
                return u'缺失值'
            elif PD01 == [{}]:
                return 0
            else:
                for i in PD01:
                    try:
                        # 基本信息段
                        PD01A = getTable(i, 'PD01A', 1)
                        # 最新表现信息段
                        PD01B = getTable(i, 'PD01B', 1)
                        # 账户类型
                        PD01AD01 = PD01A[0].get('PD01AD01')
                        # 账户状态
                        PD01BD01 = PD01B[0].get('PD01BD01')
                        # 账户余额
                        PD01BJ01 = PD01B[0].get('PD01BJ01')
                        # 账户币种
                        PD01AD04 = PD01B[0].get('PD01AD04')

                        if  PD01AD01 == 'D1' and PD01BD01 in ['1','2','4','6','7', '8'] \
                                and isfloat(PD01BJ01)>0:
                                factor.append(1)
                        else:
                              factor.append(0)
                        if PD01AD01 == 'R1' and PD01BD01 in ['1', '2','4', '5', '6','8']\
                                and isfloat(PD01BJ01) > 0:
                            factor.append(1)
                        else:
                            factor.append(0)
                        if PD01AD01 == 'R4' and PD01BD01 in ['1', '2', '4',  '6', '8'] \
                                and isfloat(PD01BJ01) > 0:
                            factor.append(1)
                        else:
                            factor.append(0)
                        if PD01AD01 == 'R2' and PD01BD01 in ['1', '2', '3', '31', '5','8'] \
                                and isfloat(PD01BJ01) > 0 and PD01AD04=='CNY-人民币':
                            factor.append(1)
                        else:
                            factor.append(0)
                        if PD01AD01 == 'R3' and PD01BD01 in ['1', '2', '3', '31', '5', '8'] \
                                and isfloat(PD01BJ01) > 0 and PD01AD04=='CNY-人民币':
                            factor.append(1)
                        else:
                            factor.append(0)
                    except:
                        factor.append(None)
                        continue

        factorNotNone = filter(lambda x: x is not None, factor)
        if len(factorNotNone) == 0:
            return u'缺失值'
        else:
            return sum(factorNotNone)
    except:
        return u'缺失值'

if __name__ == '__main__':
    import json
    file_obj = open(r"..\json\IC_DSJ_2D.json", 'r')
    content = file_obj.read()
    IC_DSJ_2D = json.loads(content, strict=False)['IC_DSJ_2D']

    print IC1_CreditCnt()
result=IC1_CreditCnt()




